﻿'основные функции


Imports System.IO
Imports System.IO.Compression
Imports System.Data.SqlClient
Imports System.Xml
Imports System.Xml.Xsl
Imports Microsoft.Office.Interop.Excel


Module myfunctions
    Public _Excel As Microsoft.Office.Interop.Excel._Application
    Public Function needevent(ByVal myevents As String)
        start.sysmessage("from Function needevent", "Проверяем нужно ли эт событие в рассылках", False, True)
        needevent = False
        For i = 1 To My.Settings.Set_address.Rows.Count
            If My.Settings.Set_address.Rows(i - 1).Item(myevents) Then
                needevent = True
                Exit For
            Else
                needevent = False
                start.sysmessage("from Function needevent", "Не нужным оказалось это событие", False, True)
            End If
        Next i
    End Function
    Public Function getSQLsc() As String  'получить актуальную строку поучения
        If My.Settings.SQLtrusted = True Then
            'start.sysmessage("Строка подключения:", "Server =" & My.Settings.nameSQL & ";Database=" & My.Settings.NameDB & ";Trusted_Connection=true;", False, True)
            Return "Server =" & My.Settings.nameSQL & ";Database=" & My.Settings.NameDB & ";Trusted_Connection=true;"

        Else
            'start.sysmessage("Строка подключения:", "Server =" & My.Settings.nameSQL & ";Database=" & My.Settings.NameDB & ";Trusted_Connection=true;", False, True)
            Return "Server =" & My.Settings.nameSQL & ";Database=" & My.Settings.NameDB & ";User Id=" & My.Settings.SQLusername & "; Password = " & My.Settings.SQLpassword & ";"

        End If
    End Function
    Public Function newevent(ByVal komment2 As String, ByVal eventID As String) 'проверем событие новое или нет
        start.sysmessage("from Function newevent", "Проверяем есть ли в поле комментарий2 маркеры", False, True)
        Dim eventmark As String = Nothing
        If eventID = 0 Then eventmark = My.Settings.event_mark_1
        If eventID = 1 Then eventmark = My.Settings.event_mark_2
        If eventID = 2 Then eventmark = My.Settings.event_mark_3
        If eventID = 3 Then eventmark = My.Settings.event_mark_4
        If eventID = 4 Then eventmark = My.Settings.event_mark_5
        If eventID = 5 Then eventmark = My.Settings.event_mark_6
        If eventID = 6 Then eventmark = My.Settings.event_mark_7
        If eventID = 7 Then eventmark = My.Settings.event_mark_8
        If eventID = 8 Then eventmark = My.Settings.event_mark_9

        If InStr(komment2, eventmark) > 0 Or InStr(komment2, "ERR") > 0 Then
            newevent = False
            start.sysmessage("from Function newevent", "Уже старое событие, отписывались ранее", False, True)
        Else
            newevent = True
            start.sysmessage("from Function newevent", "Новое событие", False, True)
        End If

    End Function
    Public Function komment(ByVal GID As String) As ArrayList 'проверем событие новое или нет
        start.sysmessage("from Function komment", "Получаем комментарии и номера ДТ", False, True)
        Dim arrayDocs As New ArrayList
        Dim con As New SqlConnection(getSQLsc())
        Dim sqlcomment2 As SqlDataAdapter = New SqlDataAdapter("Select Docs.COMMENT, Docs.COMMENT2, Docs.DOCKEY, Docs.REGNUM From GTD.dbo.Docs Docs Where (Docs.GID ='" & GID & "')", con)
        Dim tablekomments As New DataSet()
        sqlcomment2.Fill(tablekomments, "COMMENT") 'записали в таблицу с SQL
        start.sysmessage(" Комментарий " & tablekomments.Tables("COMMENT").Rows(0).Item(0).ToString, "", False, True)
        arrayDocs.Add(tablekomments.Tables("COMMENT").Rows(0).Item("COMMENT").ToString)
        arrayDocs.Add(tablekomments.Tables("COMMENT").Rows(0).Item("COMMENT2").ToString)
        arrayDocs.Add(tablekomments.Tables("COMMENT").Rows(0).Item("DOCKEY").ToString)
        arrayDocs.Add(tablekomments.Tables("COMMENT").Rows(0).Item("REGNUM").ToString)
        start.sysmessage("from Function komment", "Данные успешно получены", False, True)
        Return arrayDocs
    End Function
    Public Function newvip(ByVal GID As String)
        start.sysmessage("from func.:newvip", "Проверяем первое ли это событие о Выпуске", False, True)
        Dim con As New SqlConnection(getSQLsc())
        newvip = False
        Try
            Dim vipuslist As SqlDataAdapter = New SqlDataAdapter("SELECT EDMsgs.InOutDateTime, EDMsgs.Result FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.DocGuid='" & GID & "') AND (EDMsgs.MessageType='CMN.11010') OR (EDMsgs.DocGuid='" & GID & "') AND (EDMsgs.MessageType='CMN.11033') OR (EDMsgs.DocGuid='" & GID & "') AND (EDMsgs.MessageType='CMN.11043') OR (EDMsgs.DocGuid='" & GID & "') AND (EDMsgs.MessageType='CMN.11101') ORDER BY EDMsgs.InOutDateTime", con)
            Dim tableregnum As New System.Data.DataTable()
            vipuslist.Fill(tableregnum) 'записали в таблицу с SQL
            Dim firstDT = tableregnum.Rows(0).Item(0).ToString
            Dim reshenie = tableregnum.Rows(0).Item(1).ToString
            start.sysmessage("from func.:newvip", "сообщений о выпуске" & tableregnum.Rows.Count, False, True)
            If DateTime.Parse(firstDT) >= Today() Then
                newvip = True
            End If
        Catch

        End Try
        start.sysmessage("from func.:newvip", "Первый выпуск: " & newvip.ToString, False, True)
    End Function
    Public Function getxml(ByVal GID As String, ByVal xmlfilename As String)
        Dim con As New SqlConnection(getSQLsc())
        Dim sqlconn As SqlDataAdapter = New SqlDataAdapter("SELECT EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11044') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11023') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11024') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11025') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11026') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11033') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11042') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11010') AND (EDMsgs.DocGuid='" & GID & "') OR (EDMsgs.MessageType='CMN.11043') AND (EDMsgs.DocGuid='" & GID & "') ORDER BY EDMsgs.InOutDateTime DESC", con)
        Dim tablesendDT As New DataSet()
        If IO.Directory.Exists(System.Windows.Forms.Application.StartupPath & "\TEMP\") = False Then IO.Directory.CreateDirectory(System.Windows.Forms.Application.StartupPath & "\TEMP\")
        If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename) Then IO.File.Delete(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename)
        If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename) Then IO.File.Delete(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename & ".zlib")
        start.sysmessage("from Function getxml: Проверили наличие временной папки", "", False, True)
        Try
            sqlconn.Fill(tablesendDT, "EnvelipeID")
            start.sysmessage("from Function getxml: получили список всех ДТ ", "Количество записей: " & tablesendDT.Tables("EnvelipeID").Rows.Count, False, True)
            Dim sqlconn2 As New SqlDataAdapter("SELECT Msg FROM GTD.dbo.EDMsgsXML EDMsgsXML WHERE (EnvelopeID='" & tablesendDT.Tables("EnvelipeID").Rows(0).Item(0) & "')", con)
            sqlconn2.Fill(tablesendDT, "xml")
            start.sysmessage("from Function getxml: получили xml", "", False, True)
            Dim myRow As DataRow
            myRow = tablesendDT.Tables("xml").Rows(0)
            Dim MyData() As Byte
            MyData = myRow("Msg")
            Using fs As New FileStream(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename & ".zlib", FileMode.OpenOrCreate, FileAccess.Write)
                fs.Write(MyData, 2, MyData.Length - 2) ' для родного net метода deflate первые 2 байта лишние - наследие zlib1.dll
            End Using
            start.sysmessage("from Function getxml: Сохранили xml.zlib файл", "", False, True)
            Dim filetodecompress As FileInfo = New FileInfo(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename & ".zlib")
            Using originalFileStream As FileStream = filetodecompress.OpenRead()
                Dim currentFileName As String = filetodecompress.FullName
                Using decompressedFileStream As FileStream = File.Create(System.Windows.Forms.Application.StartupPath & "\TEMP\" & xmlfilename)
                    Using decompressionStream As New DeflateStream(originalFileStream, CompressionMode.Decompress)
                        decompressionStream.CopyTo(decompressedFileStream)
                    End Using
                End Using
            End Using
            start.sysmessage("from Function getxml: Успешно разархивировали файл", "", False, True)
            getxml = True
        Catch
            start.sysmessage("from Function getxml: ОШИБКА при получении и разархивировании XML", "", False, True)
            getxml = False
        End Try
    End Function
    Public Function scanxml(ByVal url As String) As DataSet
        start.sysmessage("from Function scanxml: Пытаемся парсить xml", "", False, True)
        Dim DTdataset As New DataSet
        Using reader As XmlTextReader = New XmlTextReader(System.Windows.Forms.Application.StartupPath & "\Temp\" & url)
            Dim temp As XmlReader = Nothing
            Dim temp1 As XmlReader = Nothing

            DTdataset.Tables.Add("Общее")
            DTdataset.Tables("Общее").Columns.Add("Инспектор")
            DTdataset.Tables("Общее").Columns.Add("Решение по ДТ")
            DTdataset.Tables("Общее").Columns.Add("Всего товаров")
            DTdataset.Tables("Общее").Columns.Add("Всего мест")
            DTdataset.Tables("Общее").Columns.Add("Страна отправки")
            DTdataset.Tables("Общее").Columns.Add("Особенности")
            DTdataset.Tables("Общее").Columns.Add("Отправитель")
            DTdataset.Tables("Общее").Columns.Add("Получатель")
            DTdataset.Tables("Общее").Columns.Add("Транспорт18")
            DTdataset.Tables("Общее").Columns.Add("Транспорт21")
            DTdataset.Tables("Общее").Columns.Add("Валюта")
            DTdataset.Tables("Общее").Columns.Add("Стоимость")
            DTdataset.Tables("Общее").Columns.Add("Специалист")
            DTdataset.Tables("Общее").Rows.Add()
            DTdataset.Tables.Add("Товары")
            DTdataset.Tables("Товары").Columns.Add("Номер товара")
            DTdataset.Tables("Товары").Columns.Add("Наименование")
            DTdataset.Tables("Товары").Columns.Add("Вес нетто")
            DTdataset.Tables("Товары").Columns.Add("Вес брутто")
            DTdataset.Tables("Товары").Columns.Add("Упаковка")
            DTdataset.Tables("Товары").Columns.Add("Количество контейнеров")
            DTdataset.Tables("Товары").Columns.Add("Контейнера")
            DTdataset.Tables("Товары").Columns.Add("ПрефПошлина")
            DTdataset.Tables.Add("Документы")
            DTdataset.Tables("Документы").Columns.Add("Товар")
            DTdataset.Tables("Документы").Columns.Add("Код")
            DTdataset.Tables("Документы").Columns.Add("Номер")
            DTdataset.Tables("Документы").Columns.Add("Дата")
            DTdataset.Tables("Документы").Columns.Add("ДатаПО")
            DTdataset.Tables("Документы").Columns.Add("Наименование")
            DTdataset.Tables("Документы").Columns.Add("КодВПлат")
            start.sysmessage("from Function scanxml:", "создали таблицу, начинаем чтение...", False, True)
            Do While (reader.Read())
                If reader.Name = "catESAD_ru:PersonName" Then DTdataset.Tables("Общее").Rows(0).Item("Инспектор") = reader.ReadElementContentAsString
                If reader.Name = "goom:GTDOutResolution" And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Do While (temp.Read())
                        If temp.Name = "goom:ResolutionDescription" Then DTdataset.Tables("Общее").Rows(0).Item("Решение по ДТ") = temp.ReadElementContentAsString
                    Loop
                End If
                If reader.Name = "DeclarationKind" Then DTdataset.Tables("Общее").Rows(0).Item("Особенности") = reader.ReadElementContentAsString
                If reader.Name = "catESAD_cu:TotalGoodsNumber" Then DTdataset.Tables("Общее").Rows(0).Item("Всего товаров") = reader.ReadElementContentAsString
                If reader.Name = "catESAD_cu:TotalPackageNumber" Then DTdataset.Tables("Общее").Rows(0).Item("Всего мест") = reader.ReadElementContentAsString
                If reader.Name = "catESAD_cu:DispatchCountryName" Then DTdataset.Tables("Общее").Rows(0).Item("Страна отправки") = reader.ReadElementContentAsString
                If (reader.Name = "ESADout_CU:ESADout_CUConsignor" Or reader.Name = "ESADout_CUConsignor") And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Do While (temp.Read())
                        If temp.Name = "cat_ru:OrganizationName" Then DTdataset.Tables("Общее").Rows(0).Item("Отправитель") = temp.ReadElementContentAsString
                    Loop
                End If
                If (reader.Name = "ESADout_CU:ESADout_CUConsignee" Or reader.Name = "ESADout_CUConsignee") And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Do While (temp.Read())
                        If temp.Name = "cat_ru:OrganizationName" Then DTdataset.Tables("Общее").Rows(0).Item("Получатель") = temp.ReadElementContentAsString
                    Loop
                End If
                If (reader.Name = "ESADout_CU:ESADout_CUDepartureArrivalTransport" Or reader.Name = "ESADout_CUDepartureArrivalTransport") And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Dim tr = 1
                    Do While (temp.Read())
                        If temp.Name = "cat_ru:TransportIdentifier" Then
                            If tr = 1 Then
                                DTdataset.Tables("Общее").Rows(0).Item("Транспорт18") = DTdataset.Tables("Общее").Rows(0).Item("Транспорт18") & temp.ReadElementContentAsString
                                tr = 2
                            Else
                                DTdataset.Tables("Общее").Rows(0).Item("Транспорт18") = DTdataset.Tables("Общее").Rows(0).Item("Транспорт18") & "/" & temp.ReadElementContentAsString & "; "
                                tr = 1
                            End If
                        End If
                    Loop
                End If
                If (reader.Name = "ESADout_CU:ESADout_CUBorderTransport" Or reader.Name = "ESADout_CUBorderTransport") And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Do While (temp.Read())
                        If temp.Name = "cat_ru:TransportIdentifier" Then DTdataset.Tables("Общее").Rows(0).Item("Транспорт21") = DTdataset.Tables("Общее").Rows(0).Item("Транспорт21") & temp.ReadElementContentAsString & "; "
                    Loop
                End If
                If reader.Name = "catESAD_cu:ContractCurrencyCode" Then DTdataset.Tables("Общее").Rows(0).Item("Валюта") = reader.ReadElementContentAsString
                If reader.Name = "catESAD_cu:TotalInvoiceAmount" Then DTdataset.Tables("Общее").Rows(0).Item("Стоимость") = reader.ReadElementContentAsString
                If (reader.Name = "ESADout_CU:FilledPerson" Or reader.Name = "FilledPerson") And reader.NodeType <> XmlNodeType.EndElement Then
                    temp = reader.ReadSubtree
                    Do While (temp.Read())
                        If temp.Name = "cat_ru:PersonSurname" Then DTdataset.Tables("Общее").Rows(0).Item("Специалист") = temp.ReadElementContentAsString
                        If temp.Name = "cat_ru:PersonName" Then DTdataset.Tables("Общее").Rows(0).Item("Специалист") = DTdataset.Tables("Общее").Rows(0).Item("Специалист") & " " & temp.ReadElementContentAsString
                        If temp.Name = "cat_ru:PersonMiddleName" Then DTdataset.Tables("Общее").Rows(0).Item("Специалист") = DTdataset.Tables("Общее").Rows(0).Item("Специалист") & " " & temp.ReadElementContentAsString
                    Loop
                End If
                If (reader.Name = "ESADout_CU:ESADout_CUGoods" Or reader.Name = "ESADout_CUGoods") And reader.NodeType <> XmlNodeType.EndElement Then

                    ' Нашёлся товар. Добавляем строку в таблицу
                    DTdataset.Tables("Товары").Rows.Add()
                    temp = reader.ReadSubtree

                    Do While (temp.Read())
                        If temp.Name = "catESAD_cu:GoodsNumeric" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Номер товара") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:GoodsDescription" And IsDBNull(DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Наименование")) And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Наименование") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:GrossWeightQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Вес брутто") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:NetWeightQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Вес нетто") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:CustomsDuty" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("ПрефПошлина") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:PakageQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") = temp.ReadElementContentAsString & ": "
                        If temp.Name = "catESAD_cu:PackingCode" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") & " " & temp.ReadElementContentAsString & "-"
                        If temp.Name = "catESAD_cu:PakingQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") & temp.ReadElementContentAsString & ", "
                        If temp.Name = "catESAD_cu:PalleteQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") & temp.ReadElementContentAsString & "/PX, "
                        If temp.Name = "catESAD_cu:PalleteDescription" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Упаковка") & temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:ContainerQuantity" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Количество контейнеров") = temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:ContainerIdentificaror" And temp.NodeType <> XmlNodeType.EndElement Then DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") & temp.ReadElementContentAsString
                        If temp.Name = "catESAD_cu:FullIndicator" And temp.NodeType <> XmlNodeType.EndElement Then
                            If temp.ReadElementContentAsString = "1" Then
                                DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") & ", "
                            Else
                                DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Контейнера") & " Часть, "
                            End If
                        End If

                        If (temp.Name = "ESADout_CU:ESADout_CUPresentedDocument" Or temp.Name = "ESADout_CUPresentedDocument") And temp.NodeType <> XmlNodeType.EndElement Then
                            temp1 = temp.ReadSubtree
                            DTdataset.Tables("Документы").Rows.Add()
                            DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("Товар") = DTdataset.Tables("Товары").Rows(DTdataset.Tables("Товары").Rows.Count - 1).Item("Номер товара")
                            Do While (temp1.Read())
                                If temp1.Name = "cat_ru:PrDocumentName" Then DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("Наименование") = temp1.ReadElementContentAsString
                                If temp1.Name = "cat_ru:PrDocumentNumber" Then DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("Номер") = temp1.ReadElementContentAsString
                                If temp1.Name = "cat_ru:PrDocumentDate" Then
                                    Dim baddate As String = temp1.ReadElementContentAsString
                                    DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("Дата") = Mid(baddate, 9, 2) & "." & Mid(baddate, 6, 2) & "." & Mid(baddate, 1, 4)
                                End If
                                If temp1.Name = "catESAD_cu:PrDocumentEndActionsDate" Then
                                    Dim baddate As String = temp1.ReadElementContentAsString
                                    DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("ДатаПО") = Mid(baddate, 9, 2) & "." & Mid(baddate, 6, 2) & "." & Mid(baddate, 1, 4)
                                End If
                                If temp1.Name = "catESAD_cu:PresentedDocumentModeCode" Then DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("Код") = temp1.ReadElementContentAsString
                                If temp1.Name = "catESAD_cu:CustomsPaymentModeCodeType" Then DTdataset.Tables("Документы").Rows(DTdataset.Tables("Документы").Rows.Count - 1).Item("КодВПлат") = temp1.ReadElementContentAsString
                            Loop
                        End If
                    Loop
                End If
            Loop
        End Using
        start.sysmessage("from Function scanxml:", "вернули DATASET", False, True)
        Return DTdataset
    End Function
    Public Function getdelivery(ByRef markevent As String, ByVal tampost As String, ByVal sender As String, ByVal recipient As String, ByVal komment As String) As ArrayList
        start.sysmessage("from Function getdelivery:", "Ищем подходящие рассылки", False, True)
        Dim massiv As New ArrayList

        For i = 0 To My.Settings.Set_address.Rows.Count - 1
            If Convert.ToBoolean(My.Settings.Set_address.Rows(i).Item(markevent)) = False Then ' проверка нужна ли эта рассылка доя нашего события
                Continue For
            End If
            'Последовательно проверяем маркеры для каждой рассылки
            If Len(My.Settings.Set_address.Rows(i).Item("ИД:там.пост")) > 0 And My.Settings.Set_address.Rows(i).Item("ИД:там.пост") = Mid(tampost, 1, Len(My.Settings.Set_address.Rows(i).Item("ИД:там.пост"))) Then
                massiv.Add(i)
            ElseIf Len(My.Settings.Set_address.Rows(i).Item("ИД:Имя")) > 0 And My.Settings.Set_address.Rows(i).Item("ИД:Имя") = sender Or My.Settings.Set_address.Rows(i).Item("ИД:Имя") = recipient Then
                massiv.Add(i)
            ElseIf Len(My.Settings.Set_address.Rows(i).Item("ИД:коммент")) > 0 And Len(komment) > 0 Then
                For j = 1 To Len(komment)
                    If Mid(komment, j, Len(My.Settings.Set_address.Rows(i).Item("ИД:коммент"))) = My.Settings.Set_address.Rows(i).Item("ИД:коммент") Then
                        massiv.Add(i)
                    End If
                Next
            ElseIf Len(My.Settings.Set_address.Rows(i).Item("ИД:ком+xls")) > 0 Then
                'загадочный фрагмент проверки по таблице excel оставим на "потом"
            End If
        Next
        start.sysmessage("from Function getdelivery:", "найдено " & massiv.Count & " рассылок", False, True)
        Return massiv
    End Function
    Public Function newerror(ByVal uid As String, ByVal comment2 As String, ByVal DTnum As String, ByVal errortext As String)

        start.sysmessage("from Function newerror:", "ставим ERR в комментарий", False, True)
        Dim con As New SqlConnection(getSQLsc())
        con.Open()
        Dim commupdate As SqlCommand = New SqlCommand("UPDATE GTD.dbo.Docs SET Docs.COMMENT2 = 'ERR " & comment2 & "' where Docs.GID='" & uid & "'", con)
        commupdate.ExecuteNonQuery()
        newerror = True
        con.Close()
        start.Send_Mail(My.Settings.erroraddress, "ОШИБКА!", "При попытке уведомления по ДТ " & DTnum & "произошла непредвиденная ошибка" & vbNewLine & "В поле комментарий2 поставлен признак ERR. Для повторной попытки необхоимо убрать тот комментарий." & vbNewLine & vbNewLine & "Текст ошибки:" & vbNewLine & errortext & vbNewLine)
    End Function
    Public Function checkevent(ByVal UID As String, ByVal comment2 As String, ByVal eventid As Integer)
        Dim eventmark As String = Nothing
        If eventid = 0 Then eventmark = My.Settings.event_mark_1
        If eventid = 1 Then eventmark = My.Settings.event_mark_2
        If eventid = 2 Then eventmark = My.Settings.event_mark_3
        If eventid = 3 Then eventmark = My.Settings.event_mark_4
        If eventid = 4 Then eventmark = My.Settings.event_mark_5
        If eventid = 5 Then eventmark = My.Settings.event_mark_6
        If eventid = 6 Then eventmark = My.Settings.event_mark_7
        If eventid = 7 Then eventmark = My.Settings.event_mark_8
        If eventid = 8 Then eventmark = My.Settings.event_mark_9
        Dim con As New SqlConnection(getSQLsc())
        con.Open()
        Dim commupdate As SqlCommand = New SqlCommand("UPDATE GTD.dbo.Docs SET Docs.COMMENT2 = '" & comment2 & " " & eventmark & "' where Docs.GID='" & UID & "'", con)
        commupdate.ExecuteNonQuery()
        con.Close()
        checkevent = True
        start.sysmessage("Добавлен коменнтарий в Альту", "", False, True)
    End Function
    Public Function formatmail(ByVal xml As DataSet, ByVal DTnum As String, ByVal addressID As Integer, ByVal eventid As Integer, ByVal eventname As String, ByVal komment As String, ByVal tamins As String, ByVal envelopeID As String, ByVal DocGuid As String) As ArrayList
        On Error GoTo ErrorHandler
        start.sysmessage("from Function formatmail:", "Генерируем письмо", False, True)
        Dim formmailtemp As New ArrayList
        Dim formmail As New ArrayList
        'первый элемент - тема
        'второй тело письма 
        'третий - получатели
        If eventid = 0 Then
            formmailtemp.Add(My.Settings.mail_subject_0)
            formmailtemp.Add(My.Settings.mail_body_0)
        End If
        If eventid = 1 Then
            formmailtemp.Add(My.Settings.mail_subject_1)
            formmailtemp.Add(My.Settings.mail_body_1)
        End If
        If eventid = 2 Then
            formmailtemp.Add(My.Settings.mail_subject_2)
            formmailtemp.Add(My.Settings.mail_body_2)
        End If
        If eventid = 3 Then
            formmailtemp.Add(My.Settings.mail_subject_3)
            formmailtemp.Add(My.Settings.mail_body_3)
        End If
        If eventid = 4 Then
            formmailtemp.Add(My.Settings.mail_subject_4)
            formmailtemp.Add(My.Settings.mail_body_4)
        End If
        If eventid = 5 Then
            formmailtemp.Add(My.Settings.mail_subject_5)
            formmailtemp.Add(My.Settings.mail_body_5)
        End If
        If eventid = 6 Then
            formmailtemp.Add(My.Settings.mail_subject_6)
            formmailtemp.Add(My.Settings.mail_body_6)
        End If
        If eventid = 7 Then
            formmailtemp.Add(My.Settings.mail_subject_7)
            formmailtemp.Add(My.Settings.mail_body_7)
        End If
        If eventid = 8 Then
            formmailtemp.Add(My.Settings.mail_subject_8)
            formmailtemp.Add(My.Settings.mail_body_8)
        End If
        Dim SertOrigin As String = Nothing
        Dim Invoices As String = Nothing
        Dim BL As String = Nothing
        Dim CMR As String = Nothing
        Dim PTD As String = Nothing
        If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Особенности")) Then PTD = xml.Tables("Общее").Rows(0).Item("Особенности")
        Dim Preff As String = Nothing
        'Сразу определим неявные переменные (сертификат происхождения, инвойсы, CMR и т.п)
        start.sysmessage("from Function formatmail:", "Закончили инициализацию", False, True)
        For i = 0 To xml.Tables("Документы").Rows.Count - 1
            If xml.Tables("Документы").Rows(i).Item("Код") = "06013" Or xml.Tables("Документы").Rows(i).Item("Код") = "06017" Then
                If InStr(SertOrigin, xml.Tables("Документы").Rows(i).Item("Номер"), CompareMethod.Text) = 0 Then
                    If SertOrigin = Nothing Then
                        SertOrigin = xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    Else
                        SertOrigin = SertOrigin & ", " & xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    End If
                End If
            End If

            If xml.Tables("Документы").Rows(i).Item("Код") = "02011" Then
                If InStr(BL, xml.Tables("Документы").Rows(i).Item("Номер"), CompareMethod.Text) = 0 Then
                    If BL = Nothing Then
                        BL = xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    Else
                        BL = BL & ", " & xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    End If
                End If
            End If
            If xml.Tables("Документы").Rows(i).Item("Код") = "04021" Then
                If InStr(Invoices, xml.Tables("Документы").Rows(i).Item("Номер"), CompareMethod.Text) = 0 Then
                    If Invoices = Nothing Then
                        Invoices = xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    Else
                        Invoices = Invoices & ", " & xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    End If

                End If
            End If
            If xml.Tables("Документы").Rows(i).Item("Код") = "02012" Or xml.Tables("Документы").Rows(i).Item("Код") = "02021" Or xml.Tables("Документы").Rows(i).Item("Код") = "02019" Or xml.Tables("Документы").Rows(i).Item("Код") = "02016" Or xml.Tables("Документы").Rows(i).Item("Код") = "02015" Then
                If InStr(CMR, xml.Tables("Документы").Rows(i).Item("Номер")) = 0 Then
                    If CMR = Nothing Then CMR = xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                    CMR = CMR & ", " & xml.Tables("Документы").Rows(i).Item("Номер") & " от " & xml.Tables("Документы").Rows(i).Item("Дата")
                End If
            End If
        Next
        start.sysmessage("from Function formatmail:", "Закончили определение неявных переменных", False, True)
        'первым делом проверим тему:
        For Each item In formmailtemp
            start.sysmessage("from Function formatmail:", "формируем части писем", False, True)
            ' первым делом разберемся со временным текстом
            For i = 0 To xml.Tables("Товары").Rows.Count - 1
                If xml.Tables("Товары").Rows(i).Item("ПрефПошлина") <> "ОО" And xml.Tables("Товары").Rows(i).Item("ПрефПошлина") <> "НС" And xml.Tables("Товары").Rows(i).Item("ПрефПошлина") <> "--" And xml.Tables("Товары").Rows(i).Item("ПрефПошлина") <> "" Then
                    Preff = xml.Tables("Товары").Rows(i).Item("ПрефПошлина")
                    If InStr(item, "{Spreff}") > 0 Then 'удаляем маркеры строки
                        item = Replace(item, "{Spreff}", "")
                        item = Replace(item, "{/preff}", "")

                    End If
                    Exit For
                End If
            Next
            If InStr(item, "{Spreff}", CompareMethod.Text) > 0 Then 'если при преддущем поиске не оказалось преференций - удаляем строку
                Dim temp1 = Mid(item, 1, InStr(item, "{Spreff}") - 1)
                Dim temp2 = Mid(item, InStr(item, "{/preff}") + 8)
                item = temp1 & temp2
            End If
            If IsDBNull(xml.Tables("Общее").Rows(0).Item("Особенности")) = True Then
                item = Replace(item, "{preDT}", "")
            Else
                If xml.Tables("Общее").Rows(0).Item("Особенности") = "ПТД" Then
                    item = Replace(item, "{preDT}", My.Settings.PREDT_text)
                Else
                    item = Replace(item, "{preDT}", "")
                End If
            End If
            start.sysmessage("from Function formatmail:", "временный текст убрали", False, True)
            item = Replace(item, "{sertOR}", SertOrigin)
            item = Replace(item, "{invoic}", Invoices)
            item = Replace(item, "{billol}", BL)
            item = Replace(item, "{cmrttn}", CMR)

            item = Replace(item, "{tamogn}", Mid(DTnum, 1, 8))
            item = Replace(item, "{tamins}", tamins)
            item = Replace(item, "{regnum}", DTnum)
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Решение по ДТ")) Then item = Replace(item, "{reshen}", xml.Tables("Общее").Rows(0).Item("Решение по ДТ")) Else item = Replace(item, "{reshen}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Отправитель")) Then item = Replace(item, "{sender}", xml.Tables("Общее").Rows(0).Item("Отправитель")) Else item = Replace(item, "{sender}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Получатель")) Then item = Replace(item, "{recipi}", xml.Tables("Общее").Rows(0).Item("Получатель")) Else item = Replace(item, "{recipi}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Всего товаров")) Then item = Replace(item, "{totalG}", xml.Tables("Общее").Rows(0).Item("Всего товаров")) Else item = Replace(item, "{totalG}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Всего мест")) Then item = Replace(item, "{totalP}", xml.Tables("Общее").Rows(0).Item("Всего мест")) Else item = Replace(item, "{totalP}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Страна отправки")) Then item = Replace(item, "{countS}", xml.Tables("Общее").Rows(0).Item("Страна отправки")) Else item = Replace(item, "{countS}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Транспорт18")) Then item = Replace(item, "{tran18}", xml.Tables("Общее").Rows(0).Item("Транспорт18")) Else item = Replace(item, "{tran18}", " ")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Транспорт21")) Then item = Replace(item, "{tran21}", xml.Tables("Общее").Rows(0).Item("Транспорт21")) Else item = Replace(item, "{tran21}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Стоимость")) Then item = Replace(item, "{Tvalue}", xml.Tables("Общее").Rows(0).Item("Стоимость")) Else item = Replace(item, "{Tvalue}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Специалист")) Then item = Replace(item, "{nameSP}", xml.Tables("Общее").Rows(0).Item("Специалист")) Else item = Replace(item, "{nameSP}", "")
            If Not DBNull.Value.Equals(xml.Tables("Общее").Rows(0).Item("Валюта")) Then item = Replace(item, "{valuta}", xml.Tables("Общее").Rows(0).Item("Валюта")) Else item = Replace(item, "{valuta}", "")
            item = Replace(item, "{kommen}", komment)

            If InStr(item, "{Stovar}") > 0 Then
                start.sysmessage("from Function formatmail:", "добавляю товары", False, True)
                Dim Goodsdescription As String = Nothing
                Dim temptxt As String = Mid(item, InStr(item, "{Stovar}") + 8, InStr(item, "{/tovar}") - InStr(item, "{Stovar}") - 8)
                For i = 0 To xml.Tables("Товары").Rows.Count - 1
                    Dim temptext2 As String = temptxt
                    If Not DBNull.Value.Equals(xml.Tables("Товары").Rows(i).Item("Наименование")) Then temptext2 = Replace(temptext2, "{goods_}", xml.Tables("Товары").Rows(i).Item("Наименование")) Else temptext2 = Replace(temptext2, "{goods_}", "")
                    If Not DBNull.Value.Equals(xml.Tables("Товары").Rows(i).Item("Вес нетто")) Then temptext2 = Replace(temptext2, "{Gnetto}", xml.Tables("Товары").Rows(i).Item("Вес нетто")) Else temptext2 = Replace(temptext2, "{Gnetto}", "")
                    If Not DBNull.Value.Equals(xml.Tables("Товары").Rows(i).Item("Вес брутто")) Then temptext2 = Replace(temptext2, "{Gbrutto}", xml.Tables("Товары").Rows(i).Item("Вес брутто")) Else temptext2 = Replace(temptext2, "{Gbrutto}", "")
                    If Not DBNull.Value.Equals(xml.Tables("Товары").Rows(i).Item("Упаковка")) Then temptext2 = Replace(temptext2, "{goodsP}", xml.Tables("Товары").Rows(i).Item("Упаковка")) Else temptext2 = Replace(temptext2, "{goodsP}", "")
                    If Not DBNull.Value.Equals(xml.Tables("Товары").Rows(i).Item("Количество контейнеров")) Then temptext2 = Replace(temptext2, "{kontai}", xml.Tables("Товары").Rows(i).Item("Количество контейнеров") & ": " & xml.Tables("Товары").Rows(i).Item("Контейнера")) Else temptext2 = Replace(temptext2, "{kontai}", "")
                    Goodsdescription = Goodsdescription & "-------------------- ТОВАР " & xml.Tables("Товары").Rows(i).Item("Номер товара") & " --------------------" & temptext2
                    If InStr(temptext2, "{docs44}") > 0 Then
                        start.sysmessage("from Function formatmail:", "добавляю документы", False, True)
                        Goodsdescription = Replace(Goodsdescription, "{docs44}", " ")

                        For j = 0 To xml.Tables("Документы").Rows.Count - 1
                            If xml.Tables("Документы").Rows(j).Item("Товар") = xml.Tables("Товары").Rows(i).Item("Номер товара") Then
                                Goodsdescription = Goodsdescription & xml.Tables("Документы").Rows(j).Item("Код") & vbTab & xml.Tables("Документы").Rows(j).Item("Номер") & " от " & xml.Tables("Документы").Rows(j).Item("Дата") & " " & xml.Tables("Документы").Rows(j).Item("Наименование") & vbNewLine
                            End If
                        Next
                    End If
                    Goodsdescription = Goodsdescription & vbNewLine
                Next

                item = Mid(item, 1, InStr(item, "{Stovar}") - 1) & Goodsdescription &
                    Mid(item, InStr(item, "{/tovar}") + 8, InStrRev(item, "{/tovar}") - 1)
            End If

            formmail.Add(item)
        Next
        start.sysmessage("from Function formatmail:", "Добавляем адреса", False, True)
        formmail.Add(My.Settings.Set_address.Rows(addressID).Item("Emails")) 'С адресами делать ничего не надо

        'вложение
        Dim vlozh = makevlozh(xml, DTnum, addressID, eventname, Preff, PTD, Invoices, SertOrigin)
        start.sysmessage("from Function formatmail: вложение", vlozh, False, True)
        formmail.Add(vlozh)

        start.sysmessage("from Function formatmail:", "Добавляю доп.вложения", False, True)
        If eventid >= 3 And eventid <= 6 Then
            Dim dopvlozh As New ArrayList
            dopvlozh = makedopvlozh(envelopeID)
            For Each item In dopvlozh
                formmail.Add(item)
            Next
        End If
        start.sysmessage("from Function formatmail:", "добавляю xml", False, True)

        If eventid = 8 And My.Settings.attach_xml = True Then
            formmail.Add(System.Windows.Forms.Application.StartupPath & "\Temp\" & DocGuid & ".xml")
        End If
        start.sysmessage("from Function formatmail:", "обновляю оставшиеся вложения", False, True)
        'добавляем ещё пустые сслки на вложения
        Do Until formmail.Count = 6
            formmail.Add("")
        Loop

        start.sysmessage("from Function formatmail:", "Возвращяю сообщение", False, True)
        Return formmail
        Exit Function
ErrorHandler:
        start.sysmessage("from Function formatmail: ОШИБКА", Err.Description, False, True)
        Resume Next
    End Function
    Public Function makevlozh(ByVal xml As DataSet, ByVal DTnum As String, ByVal addressID As Integer, ByVal eventname As String, ByVal preff As String, ByVal PTD As String, ByVal Invoices As String, ByVal SertOrigin As String) As String
        Dim vlozhstring As String = Nothing
        'что-то делаем с вложениями 
        start.sysmessage("from makevlozh: формирую вложение", "", False, True)
        If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & ".xls") Or IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & PTD & ".xls") Or IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & preff & ".xls") Then
            start.sysmessage("from makevlozh: найдено вложение для данного уведомления", "", False, True)
            DTnum = Mid(DTnum, 1, 8) & "_" & Mid(DTnum, 10, 6) & "_" & Mid(DTnum, 17, 7)
            If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & ".xls") Then My.Computer.FileSystem.CopyFile(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & ".xls", System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".xls")
            If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & preff & ".xls") Then My.Computer.FileSystem.CopyFile(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & preff & ".xls", System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".xls")
            If IO.File.Exists(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & PTD & ".xls") Then My.Computer.FileSystem.CopyFile(System.Windows.Forms.Application.StartupPath & "\Template\" & Convert.ToString(addressID) & "-" & eventname & "-" & PTD & ".xls", System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".xls")
            Dim _Excel As New Application
            start.sysmessage("from makevlozh: скопировал вложение", "", False, True)
            Try
                Dim _Workbook As Workbook = _Excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".xls")
                start.sysmessage("from makevlozh: скопировал вложение", "", False, True)
                Dim _Sheet As Worksheet = CType(_Workbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
                start.sysmessage("from makevlozh: определил книгу", "", False, True)
                Dim cell As Range
                For Each cell In _Sheet.UsedRange.Cells
                    cell.Value = Replace(cell.Value, "{date}", Today())
                    cell.Value = Replace(cell.Value, "{sertOR}", SertOrigin)
                    cell.Value = Replace(cell.Value, "{invoic}", Invoices)
                    cell.Value = Replace(cell.Value, "{regnum}", Mid(DTnum, 1, 8) & "/" & Mid(DTnum, 10, 6) & "/" & Mid(DTnum, 17, 7))
                    cell.Value = Replace(cell.Value, "{nameSP}", xml.Tables("Общее").Rows(0).Item("Специалист"))
                    cell.Value = Replace(cell.Value, "{sender}", xml.Tables("Общее").Rows(0).Item("Отправитель"))
                    cell.Value = Replace(cell.Value, "{recipi}", xml.Tables("Общее").Rows(0).Item("Получатель"))
                Next

                _Workbook.Save()
                _Sheet.ExportAsFixedFormat(Type:=XlFixedFormatType.xlTypePDF, Filename:=System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".pdf", Quality:=XlFixedFormatQuality.xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False)
                _Workbook.Close()
                _Excel.Quit()
                releaseObject(_Excel)
                vlozhstring = (System.Windows.Forms.Application.StartupPath & "\Temp\" & DTnum & ".pdf")

            Catch ex As Exception ' обработка ошибок
                start.sysmessage("from makevlozh: C приобщением что-то не получилось", ex.Message, False, True)
                If ex.ToString <> "-2147467262" Then
                    _Excel.Workbooks(1).Close(False) ' в случаи ошибки экземпляр Excel повиснит в памяти, а так мы закроем процесс не сохраняя
                    _Excel.Quit()
                    releaseObject(_Excel)
                Else
                    start.sysmessage("from makevlozh: Вероятно не установлен нужный Excel. Ошибка:", ex.HResult.ToString, False, True)
                End If
                vlozhstring = ""
            End Try
        End If
        start.sysmessage("from makevlozh: Возвращяю строку вложения", vlozhstring, False, True)
        Return vlozhstring
    End Function
    Public Function makedopvlozh(ByVal envelopeID As String) As ArrayList
        Dim con As New SqlConnection(getSQLsc())
        Dim listdopvlozh As New ArrayList
        Dim tablesendDT As New DataSet()
        Try
            Dim sqlconn2 As New SqlDataAdapter("SELECT Msg FROM GTD.dbo.EDMsgsXML EDMsgsXML WHERE (EnvelopeID='" & envelopeID & "')", con)
            sqlconn2.Fill(tablesendDT, "xml")
            start.sysmessage("from Function makedopvlozh: получили xml", "", False, True)
            Dim myRow As DataRow
            myRow = tablesendDT.Tables("xml").Rows(0)
            Dim MyData() As Byte
            MyData = myRow("Msg")
            Using fs As New FileStream(System.Windows.Forms.Application.StartupPath & "\TEMP\" & envelopeID & ".zlib", FileMode.OpenOrCreate, FileAccess.Write)
                fs.Write(MyData, 2, MyData.Length - 2) ' для родного net метода deflate первые 2 байта лишние - наследие zlib1.dll
            End Using
            start.sysmessage("from Function makedopvlozh: Сохранили xml.zlib файл", "", False, True)
            Dim filetodecompress As FileInfo = New FileInfo(System.Windows.Forms.Application.StartupPath & "\TEMP\" & envelopeID & ".zlib")
            Using originalFileStream As FileStream = filetodecompress.OpenRead()
                Dim currentFileName As String = filetodecompress.FullName
                Using decompressedFileStream As FileStream = File.Create(System.Windows.Forms.Application.StartupPath & "\TEMP\" & envelopeID & ".xml")
                    Using decompressionStream As New DeflateStream(originalFileStream, CompressionMode.Decompress)
                        decompressionStream.CopyTo(decompressedFileStream)
                    End Using
                End Using
            End Using
            start.sysmessage("from Function makedopvlozh: Успешно разархивировали файл", "", False, True)
        Catch
            start.sysmessage("from Function makedopvlozh: ОШИБКА при получении и разархивировании XML", "", False, True)
        End Try


        start.sysmessage("from Function makedopvlozh: Начинаю просматривать XML", "", False, True)
        Dim myXMLtransform As XslCompiledTransform
        Dim xmlfile As New XmlDocument()
        Dim nodelist As XmlNodeList
        xmlfile.Load(System.Windows.Forms.Application.StartupPath & "\TEMP\" & envelopeID & ".xml")
        Dim nsm As XmlNamespaceManager = New XmlNamespaceManager(xmlfile.NameTable)
        nsm.AddNamespace("env", "http://www.w3.org/2001/06/soap-envelope")
        nsm.AddNamespace("fts", "http://www.w3.org/2000/09/xmldsig#")
        nsm.AddNamespace("edcnt", "http://customs.ru/Information/ExchangeDocuments/ED_Container:5.8.0")

        nodelist = xmlfile.SelectNodes(".//fts:Object", nsm)
        For Each item As XmlNode In nodelist
            start.sysmessage("from Function makedopvlozh: Проверяем ... ноду", "", False, True)
            If item.FirstChild.Name = "edcnt:ED_Container" Then Continue For
            start.sysmessage("from Function makedopvlozh: Сохраняем в отдельный xml", "", False, True)
            Dim tr As XmlWriter = XmlWriter.Create(System.Windows.Forms.Application.StartupPath & "\TEMP\" & "_temp.xml")
            item.WriteContentTo(tr)
            tr.Close()

            Dim filename As String = Nothing
            myXMLtransform = New XslCompiledTransform()
            start.sysmessage("from Function makedopvlozh: проверяем что за документ ", "", False, True)
            If item.FirstChild.Name = "radde:NotifAddControl" And item.FirstChild.Attributes("DocumentModeID").Value = "1004087E" Then filename = "Доп.проверка_стоимости"
            If item.FirstChild.Name = "ccp:CalculationAmountPayment" And item.FirstChild.Attributes("DocumentModeID").Value = "1006024E" Then filename = "Расчёт"
            If item.FirstChild.Name = "ntfin:NotifInspectionReqGoods" And item.FirstChild.Attributes("DocumentModeID").Value = "1006137E" Then
                If item.FirstChild.Item("ntfin:DocumentKind").InnerText = "0" Then filename = "Уведомление_о_досмотре"
                If item.FirstChild.Item("ntfin:DocumentKind").InnerText = "1" Then filename = "Требование_предъявить_товары"
            End If
            If item.FirstChild.Name = "ain:ActInspection" And item.FirstChild.Attributes("DocumentModeID").Value = "1006033E" Then filename = "Акт_досмотра"
            If item.FirstChild.Name = "rocp:ResolutionOrigCountryPreference" And item.FirstChild.Attributes("DocumentModeID").Value = "1006148E" Then filename = "Решение_по_стране"

            If filename = Nothing Then Continue For
            start.sysmessage("from Function makedopvlozh: обнаружен документ" & filename, "", False, True)
            myXMLtransform.Load(System.Windows.Forms.Application.StartupPath & "\XSLT\" & filename & ".xslt")
            myXMLtransform.Transform(System.Windows.Forms.Application.StartupPath & "\TEMP\" & "_temp.xml", System.Windows.Forms.Application.StartupPath & "\TEMP\" & filename & ".html")
            start.sysmessage("from Function makedopvlozh: преобразование закончил, добавляю вложение", "", False, True)
            listdopvlozh.Add(System.Windows.Forms.Application.StartupPath.ToString & "\TEMP\" & filename & ".html")
        Next
        start.sysmessage("from Function makedopvlozh: TOTAL подготовлено вложений " & listdopvlozh.Count, "", False, True)
        Return listdopvlozh
    End Function
    Function releaseObject(ByVal obj As Object)
        releaseObject = True
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Function
    Public Sub cleartempfolder()
        Try
            start.sysmessage("from sub cleartempfolder", "Удаляем временные файлы", False, True)
            'удаляем временные файлы
            Dim tempfilelist As String() = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\temp\")
            For Each f As String In tempfilelist
                File.Delete(f)
            Next
        Catch
            start.sysmessage("from sub cleartempfolder", "Ошибка при удалении временных файлов", False, True)
        End Try
    End Sub
End Module
